<%@page import="java.net.URLEncoder"%>
<%@page import="listener.PayLinstener"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="com.util.GetIP,hyl.core.MyFun,java.util.Map" %>
<%@page import="java.io.PrintWriter" %>
<%@page import="com.alibaba.fastjson.*" %>
<%@page import="com.wxpay.config.*" %>
<%@page import="com.wxpay.config.WxPayApi.*" %>
<%@page import="com.wxpay.util.*" %>
<%
	PrintWriter shuchu = response.getWriter();
	JSONObject maps = PayLinstener.map;
	String code = request.getParameter("code");
	System.out.println(code);
	JSONObject map =maps.getJSONObject(code);
	System.out.println(map.toJSONString());
	if(map==null){
		return;
	}
	JSONObject wx = map.getJSONObject("wx");
	String WIDtotal_amount = request.getParameter("WIDtotal_amount");
	String appID = wx.getString("appID");
	String mchID = wx.getString("mchID");
	String partnerKey = wx.getString("partnerKey");
	String notifyUrl = wx.getString("notifyUrl");
	// 获取会员ip地址(有的手机可以直接获取到真实ip,大部分都是有代理的)
	String ip = GetIP.getIpAddress(request);
	H5ScencInfo scene = new H5ScencInfo();
	H5 h5_info = new H5();
	h5_info.setType("WAP");
	h5_info.setWap_url(map.getString("Wap_url"));
	h5_info.setWap_name(map.getString("name"));
	scene.setH5_info(h5_info);
	String sceneInfo = JSON.toJSONString(scene.getH5_info());

	/**
	 * 重头戏：拼接微信微信支付参数 有的是数据库获取的,这里我是直接写死了,比如商品详情,付款金额之类的
	 */
	WxPayConf params = new WxPayConf();
	// AppId
	params.setAppId(appID);
	// 商户号
	params.setMchId(mchID);
	// 商品简单描述(订单名)
	params.setBody(map.getString("name"));
	// 用户端IP
	params.setSpbillCreateIp(ip);
	// 订单总金额，单位为分
	params.setTotalFee(WIDtotal_amount);
	// H5支付的交易类型为MWEB(默认)
	params.setTradeType(TradeType.MWEB);
	// 微信支付成功后的回调Url
	params.setNotifyUrl(notifyUrl);
	// 商户秘钥
	params.setPaternerKey(partnerKey);
	// 随机字符串，不长于32位(我这里直接获取当前时间毫秒值)
	String TradeNo = request.getParameter("WIDout_trade_no");
	params.setOutTradeNo(TradeNo);
	// 场景信息Json字符串
	params.setSceneInfo(sceneInfo);
	Map<String, String> build = params.Build();

	/**
	 * 直接用微信统一下单工具类,并接收返回的Xml,返回内容详见微信支付开发文档
	 */
	String xmlResult = WxPayApi.pushOrder(false, build);
	Map<String, String> result = WXPayUtil.xmlToMap(xmlResult);
	// 返回状态码
	String return_code = result.get("return_code");
	// 返回状态码
	String return_msg = result.get("return_msg");
	// 业务结果
	String result_code = result.get("result_code");
	System.out.println(JSON.toJSONString(result));
	
	if (MyFun.isEmpty(return_code)||!return_code.contains("SUCCESS")){
		//throw new RuntimeException(return_msg);
		shuchu.print("error");
		shuchu.flush();
		shuchu.close();
		return;
	}
		
	if (MyFun.isEmpty(result_code)||!result_code.contains("SUCCESS")){
		//throw new RuntimeException(return_msg);
		shuchu.print("error");
		shuchu.flush();
		shuchu.close();
		return;
	}
	/**
	 * mweb_url为拉起微信支付收银台的中间页面，可通过访问该url来拉起微信客户端，完成支付,mweb_url的有效期为5分钟。
	 * 直接return给前端,调用该链接会直接拉起微信支付(！！！微信外浏览器调用！！！)
	 */
	String mwebUrl = result.get("mweb_url");
	
	String redirect_url=wx.getString("mweb_url");
	
	if(request.getParameter("url")!=null&&!request.getParameter("url").isEmpty()){
		redirect_url=request.getParameter("url");
	}
	
	redirect_url=URLEncoder.encode(redirect_url);
	mwebUrl+="&redirect_url="+redirect_url;
	response.sendRedirect(mwebUrl);
%>